﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Reflection;
using System.Configuration;
using WLMCoreLibrary;

namespace WLMWebServices
{


    /// <summary>
    /// Summary description for EmailSender
    /// </summary>
    [WebService(Namespace = "http://servicios.weblogsmexico.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class Emailer : System.Web.Services.WebService
    {
        [WebMethod]
        public string EnviarEmail(EmailRecipient[] recipientes, string Subject, string Body, WebSiteProfile perfilWebsite)
        {
            dbConnector dbConnection= new dbConnector();;
            try
            {
              


                ASPEMAILLib.IMailSender mensajeEmail;
                mensajeEmail = new ASPEMAILLib.MailSender();
                mensajeEmail.Host = ConfigurationManager.AppSettings["SMTPServer"].ToString();
                mensajeEmail.Port = 26;
                mensajeEmail.Username = ConfigurationManager.AppSettings["SMTPUser"].ToString();
                mensajeEmail.Password = ConfigurationManager.AppSettings["SMTPPassword"].ToString();
                mensajeEmail.IsHTML = 1;
                mensajeEmail.From = perfilWebsite.ContactEmail.Email;
                mensajeEmail.FromName = perfilWebsite.ContactEmail.Name;
                mensajeEmail.Subject = Subject;
                //Aqui se debera insertar la publicidad a cada mensaje enviado
                MailsPublicidad publicidad = new MailsPublicidad(new Random(),ref dbConnection);

                mensajeEmail.Body = Body + publicidad.contenido;
                publicidad.envios++;
                publicidad.Save();
                publicidad.Dispose();
                if (recipientes.Length != 0)
                    if (recipientes.Length > 1)
                    {

                        foreach (EmailRecipient destinatario in recipientes)
                        {
                            if (WLMFunctions.IsValidEmailAddress(destinatario.Email))
                                if (destinatario.Email != perfilWebsite.ContactEmail.Email)
                                {                                    
                                    mensajeEmail.AddBcc(destinatario.Email, destinatario.Name);
                                    MailsRegistro registro = new MailsRegistro(ref dbConnection);
                                    registro.Titulo = mensajeEmail.Subject;
                                    registro.contenido = mensajeEmail.Body;
                                    registro.de = mensajeEmail.From;
                                    registro.deNombre = mensajeEmail.FromName;
                                    registro.para = destinatario.Email;
                                    registro.paraNombre = destinatario.Name;
                                    registro.fechaEnvio = DateTime.Now;
                                    registro.dominio = perfilWebsite.WebSite;
                                    registro.Save();
                                    //registro.Dispose();
                                }

                        }
                        mensajeEmail.AddAddress(perfilWebsite.ContactEmail.Email, perfilWebsite.ContactEmail.Name);
                        mensajeEmail.Send(Missing.Value);
                    }
                    else
                    {

                        if (WLMFunctions.IsValidEmailAddress(recipientes[0].Email))
                            if (recipientes[0].Email != perfilWebsite.ContactEmail.Email)
                            {
                                mensajeEmail.AddAddress(recipientes[0].Email, recipientes[0].Name);
                                mensajeEmail.Send(Missing.Value);
                                MailsRegistro registro = new MailsRegistro(ref dbConnection);
                                registro.Titulo = mensajeEmail.Subject;
                                registro.contenido = mensajeEmail.Body;
                                registro.fechaEnvio = DateTime.Now;
                                registro.de = mensajeEmail.From;
                                registro.deNombre = mensajeEmail.FromName;
                                registro.para = recipientes[0].Email;
                                registro.paraNombre = recipientes[0].Name;
                                registro.dominio = perfilWebsite.WebSite;
                                registro.Save();
                                //  registro.Dispose();
                            }
                        mensajeEmail.Reset();
                        mensajeEmail.From = recipientes[0].Email;
                        mensajeEmail.FromName = recipientes[0].Name;
                        mensajeEmail.AddAddress(perfilWebsite.ContactEmail.Email, perfilWebsite.ContactEmail.Name);
                        mensajeEmail.Send(Missing.Value);
                    }



                return "";
            }
            catch (Exception ex)
            {
                dbConnection.CloseConnection();
                return ex.Message+ex.StackTrace;
                
            }

        }
    }
}
